package main

import "fmt"

type Point struct {
	x, y int
}

func main() {
	p1 := Point{4, 5} // Point实例
	fmt.Printf("%T %[1]v\n", p1)
	p2 := &p1 // 指针
	fmt.Printf("%T %[1]v\n", p2)
	p3 := new(Point) // new(类型) 内建函数
	fmt.Printf("%T %[1]v\n", p3)

	// 访问属性
	fmt.Println(p1.x, p1.y)
	fmt.Println((*p2).x, p2.x)

	fmt.Println("~~~~~~~~~~~~~~~~~~~~~~~~")

	// 成员写入
	p1.x = 100
	fmt.Println(p1.x, p1.y, p1)
	fmt.Println(p2.x, p2.y, p2)

	fmt.Println("~~~~~~~~~~~~~~~~~~~~~~~~")

	p2.x = 200
	fmt.Println(p1.x, p1.y, p1)
	fmt.Println(p2.x, p2.y, p2)

	p3.x = 300
	fmt.Println(p3.x, p3.y, p3)

}
